What is async?
The async npm package provides utility functions for working with asynchronous JavaScript. It offers a variety of powerful control flow functions and utilities to work with asynchronous operations, helping to manage callbacks, reduce boilerplate code, and increase readability.
What are async's main functionalities?
Control Flow
Execute an array of functions in series, each one running once the previous function has completed. If any functions in the series pass an error to its callback, no more functions are run, and the main callback is immediately called with the value of the error.
async.series([
function(callback) {
// do some stuff ...
callback(null, 'one');
},
function(callback) {
// do some more stuff ...
callback(null, 'two');
}
],
function(err, results) {
// results is now equal to ['one', 'two']
});
Collections
Apply a function to each item in a collection and collect the results. For example, you can use `async.map` to get the file stats for an array of file names.
async.map(['file1','file2','file3'], fs.stat, function(err, results) {
// results is now an array of stats for each file
});
Utilities
Repeatedly call a function a set number of times and collect the results. It's useful for seeding databases, among other things.
async.times(5, function(n, next) {
createUser(n, function(err, user) {
next(err, user);
});
}, function(err, users) {
// we should now have 5 users
});
Other packages similar to async
bluebird
Bluebird is a fully-featured promise library with a focus on innovative features and performance. It allows for promise-based asynchronous control flow, which can lead to cleaner and more readable code compared to traditional callback patterns. Bluebird also provides utility functions similar to async but uses promises instead of callbacks.
q
Q is a tool for making and composing asynchronous promises in JavaScript. It helps in organizing asynchronous code with more maintainable and readable structures. Q is similar to async in that it helps manage asynchronous operations but does so through promises rather than callbacks.
co
Co is a generator based flow-control utility for Node.js and the browser, using promises. It allows you to work with generators for asynchronous control flow, which can make your code more readable and maintainable. Co is different from async in that it leverages generator functions to pause and resume execution, while async uses callbacks.
Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with Node.js and installable via npm i async
, it can also be used directly in the browser. An ESM/MJS version is included in the main async
package that should automatically be used with compatible bundlers such as Webpack and Rollup.
A pure ESM version of Async is available as async-es
.
For Documentation, visit https://caolan.github.io/async/
For Async v1.5.x documentation, go HERE
var async = require("async");
var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
var configs = {};
async.forEachOf(obj, (value, key, callback) => {
fs.readFile(__dirname + value, "utf8", (err, data) => {
if (err) return callback(err);
try {
configs[key] = JSON.parse(data);
} catch (e) {
return callback(e);
}
callback();
});
}, err => {
if (err) console.error(err.message);
doSomethingWith(configs);
});
var async = require("async");
async.mapLimit(urls, 5, async function(url) {
const response = await fetch(url)
return response.body
}, (err, results) => {
if (err) throw err
console.log(results)
})